# 位置参数
# 函数调用时，实参默认按位置顺序传递，需要个数和形参匹配。按位置传递的参数，称为：“位置参数”。
# 【操作】测试位置参数
def f1(a,b,c):
    print(a,b,c)

f1(2,3,4)
f1(2,3)     #报错，位置参数不匹配

# 【操作】测试默认值参数
def f1(a,b,c=10,d=20):   #默认值参数必须位于普通位置参数后面
    print(a,b,c,d)

f1(8,9)
f1(8,9,19)
f1(8,9,19,29)

# 命名参数
def f1(a,b,c):
    print(a,b,c)

f1(8,9,19)          #位置参数
f1(c=10,a=20,b=30)  #命名参数

# 可变参数指的是“可变数量的参数”。分两种情况：
# 1. *param（一个星号），将多个参数收集到一个“元组”对象中。
# 2. **param（两个星号），将多个参数收集到一个“字典”对象中。

# 【操作】测试可变参数处理（元组、字典两种方式）
def f1(a,b,*c):
    print(a,b,c)

f1(8,9,19,20)


def f2(a,b,**c):
    print(a,b,c)
f2(8,9,name='gaoqi',age=18)


def  f3(a,b,*c,**d):
    print(a,b,c,d)

f3(8,9,20,30,name='gaoqi',age=18)

# 强制命名参数
def f1(*a,b,c):
    print(a,b,c)


#f1(2,3,4)   #会报错。由于a是可变参数，将2,3,4全部收集。造成b和c没有赋值。

f1(2,b=3,c=4) 
